#include <iostream>
using namespace std; 

void swap(int *a, int *b)
{
    *a ^= *b;
    *b ^= *a;
    *a ^= *b;
}
void swap(int &a,int &b)
{
    cout<<"a:"<<&a<<endl;
    cout<<"b:"<<&b<<endl;
    a ^= b;
    b ^= a;
    a ^= b;
}

int &func(int &a)
{
    //注意 不要将此处定义局部变量作引用返回。(生命周期)
    a++;
    return a;
}

int main ()
{
    int a = 111;
    int b = 999;

    //对比指针和引用。体会引用是在同级解决问题，指针是传N级，解决N-1级的问题。
    swap(&a,&b);
    cout<<a<<" "<<b<<endl;
    cout<<"a:"<<&a<<endl;
    cout<<"b:"<<&b<<endl;   //打印两变量的地址，确实和引用之后的地址相同。引用时不必再开创空间。
    swap(a,b);
    cout<<a<<" "<<b<<endl;

    //引用作返回值
    a = func(b);
    cout<<"a = "<<a<<"b = "<<b<<endl;
    
    return 0;
}